class Solution:
def numPoints(self, rect) -> int:
x1, y1, x2, y2 = rect
return (x2 - x1 + 1) * (y2 - y1 + 1)
def __init__(self, rects: List[List[int]]):
self.rects = rects
self.presum = [0]
for i in range(len(rects)):
self.presum.append(self.presum[-1] + self.numPoints(rects[i]))
def pick(self) -> List[int]:
n = random.randint(1, self.presum[-1])
i = bisect.bisect_left(self.presum, n)
n -= self.presum[i-1]
x1, y1, x2, y2 = self.rects[i-1]
q, r = divmod(n, x2 - x1 + 1)
if r:
return [x1 + r -1, y1 + q]
return [x2, y1 + q -1]
# Your Solution object will be instantiated and called as such:
# obj = Solution(rects)
# param_1 = obj.pick()
25A - IQ test | 785A - Anton and Polyhedrons |
1542B - Plus and Multiply | 306A - Candies |
1651C - Fault-tolerant Network | 870A - Search for Pretty Integers |
1174A - Ehab Fails to Be Thanos | 1169A - Circle Metro |
780C - Andryusha and Colored Balloons | 1153A - Serval and Bus |
1487C - Minimum Ties | 1136A - Nastya Is Reading a Book |
1353B - Two Arrays And Swaps | 1490E - Accidental Victory |
1335A - Candies and Two Sisters | 96B - Lucky Numbers (easy) |
1151B - Dima and a Bad XOR | 1435B - A New Technique |
1633A - Div 7 | 268A - Games |
1062B - Math | 1294C - Product of Three Numbers |
749A - Bachgold Problem | 1486B - Eastern Exhibition |
1363A - Odd Selection | 131B - Opposites Attract |
490C - Hacking Cypher | 158B - Taxi |
41C - Email address | 1373D - Maximum Sum on Even Positions |